package com.zp.self.module.level_4_算法练习.数据结构.String;

/**
 * @author By ZengPeng
 */
public class 力扣_520_检测大写字母 {
    //测试
    public static void main(String[] args) {

        System.out.println(new 力扣_520_检测大写字母().detectCapitalUse("USA"));
        System.out.println(new 力扣_520_检测大写字母().detectCapitalUse("FlaG"));
        System.out.println(new 力扣_520_检测大写字母().detectCapitalUse("FFFFFFFFFFFFFFFFFFFFf"));
        System.out.println(new 力扣_520_检测大写字母().detectCapitalUse("Gg"));
        System.out.println(new 力扣_520_检测大写字母().detectCapitalUse("gG"));
        System.out.println(new 力扣_520_检测大写字母().detectCapitalUse("leetcode"));
    }

    /**
    题目：我们定义，在以下情况时，单词的大写用法是正确的：
     全部字母都是大写，比如 "USA" 。
     单词中所有字母都不是大写，比如 "leetcode" 。
     如果单词不只含有一个字母，只有首字母大写， 比如 "Google" 。
     给你一个字符串 word 。如果大写用法正确，返回 true ；否则，返回 false 。

     示例 1：
     输入：word = "USA"
     输出：true

     示例 2：
     输入：word = "FlaG"
     输出：false

    分析：【P ♥♥♥】
       1.遍历字符串：
            a.变量 haveLow 记录是否出现过消息字母，如果出现，需要判断大写字母个数numbUp >1? 是否在第一个
            b.直接从第二个字符开始判断，提前跳出的判断
    边界值 & 注意点：
       1.
     **/
    public boolean detectCapitalUse(String word) {
        if(word.length()==1) return true;
        boolean haveUp=false,haveLow=word.charAt(0)>96;
        for (int i = 1; i < word.length(); i++) {//首字母不用管
            if(word.charAt(i)<97 ){
                if(haveLow)return false;//出现过小写，再次出现大写，剪枝
                haveUp=true;
            }else {
                if(haveUp)return false;//出现过大写，且现在不是第一位大写，剪枝
                haveLow=true;
            }
        }
        return true;
    }
}
